package de.g18.gruppe3.dataio.service;

import java.io.BufferedReader;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import de.g18.gruppe3.common.io.FileImportService;
import de.g18.gruppe3.common.model.OrganizationalUnit;
import de.g18.gruppe3.common.model.User;

/**
 * File-Schnittstelle zum auslesen von Datensätzen aus einer Datei.
 *
 * @author <a href="mailto:">Daniel Fels</a>
 */
public class FileImportServiceImpl implements FileImportService{

	/**
	 * Konstruktor
	 */
	public FileImportServiceImpl(){
	}

	/**
	 * erzeugt eine Liste von Typ User, liesst dabei eine datei ein 
	 * und überspringt die erste Zeile
	 * @param url
	 * @param delimiter
	 * @return
	 */
	private List<User> readData(String url, String delimiter) {
		String zeile;
		String[] split = null;
		int x = 0;
		ArrayList<String> list = new ArrayList<String>();
		try {
				FileReader file = new FileReader(url);
				BufferedReader data = new BufferedReader(file);

				while ((zeile = data.readLine()) != null) {
					if (x != 0) {
						split = zeile.split(delimiter);
						for(int i=0; i<split.length; i++) {
							//leere Zeilen ignorieren
							if( !split[i].equals("") ){
								//eventuelle Leerzeichen zwischen zwei ';' entfernen
								//und Wert in Liste schreiben
								list.add(split[i].trim());
							}
						}
					}else {
						x = x + 1;
						//überspringt die erste Zeile
					}
				}
		} catch (FileNotFoundException e) {
			System.out.println("Datei nicht gefunden");
		} catch (IOException e) {
			System.out.println("E/A-Fehler");
		}
		return toListUser(list);
	}

	/**
	 * Wandelt die ArrayList in eine List vom Typ User um.
	 * @param ArrayList<String>list
	 * @return List<User>
	 */
	private List<User> toListUser(ArrayList<String> list){
		List<User> temp = new ArrayList<User>();
		int x = 0;
		String login = "";
		String vorname = "";
		String name = "";
		String pw = "";
		String ou = "";

		for (int i = 0; i < list.size(); i++) {
			if (x < 5) {
				if (x == 0) {
					name = list.get(i);
				}
				if (x == 1) {
					vorname = list.get(i);
				}
				if (x == 2) {
					login = list.get(i);
				}
				if (x == 3) {
					pw = list.get(i);
				}
				if (x == 4) {
					ou = list.get(i);
					User user = new User(login, vorname, name);
					user.setPasswort(pw);
					user.setOU(new OrganizationalUnit(ou));
					temp.add(user);
					x = -1;
				}

			}
			x++;
		}

		return temp;
	}

	/**
	 * Methode aus dem Interface, Datei Pfad und Delimiter eingabe
	 * Rückgabe eine Liste, die Einträge aus einer CSV Datei enthält
	 */
	@Override
	public List<User> importUserCSV(String url, String delimiter) {
		return readData(url, delimiter);
	}

}